package visiopuce;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;

import visiopuce.action.ChangeDroitsUtilisateurAction;
import visiopuce.action.CorrectionChampPrelAction;
import visiopuce.action.CotationNonPasseeAction;
import visiopuce.action.CreerDossierAction;
import visiopuce.action.CreerFeuilleTravailAction;
import visiopuce.action.CreerFicherCotationAction;
import visiopuce.action.ImportDonneesFeuillePuceAction;
import visiopuce.action.ListeADNAction;
import visiopuce.action.ListeTravailAction;
import visiopuce.action.OuvrirDossierAction;
import visiopuce.action.RechercheDossierPopupAction;
import visiopuce.action.RechercheRegionPopupAction;
import visiopuce.action.RechercherFeuilleTravailAction;
import visiopuce.action.RecupererPrescriptionAction;
import visiopuce.action.RecupererPrescriptionPDFAction;
import visiopuce.action.ReunionPuceAction;
import visiopuce.service.DroitServiceImpl;
import visiopuce.ui.view.DossierEditor;

/**
 * An action bar advisor is responsible for creating, adding, and disposing of
 * the actions added to a workbench window. Each window will be populated with
 * new actions.
 */
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

	// Actions - important to allocate these only in makeActions, and then use
	// them
	// in the fill methods. This ensures that the actions aren't recreated
	// when fillActionBars is called with FILL_PROXY.
	private IWorkbenchAction exitAction;
	private IWorkbenchAction aboutAction;
	private IWorkbenchAction newWindowAction;

	private Action rechercherDossierPopupAction;
	private Action rechercherRegionPopupAction;
	private Action droitsUtilisateurAction;
	private Action ouvrirDossierAction;
	private Action creerDossierAction;
	// private Action creerPrelevementAction;
	// private Action creerAnalyseAction;
	private Action listeTravailAction;
	
	private Action reunionPuceAction;
	// private Action parserFichierAction;
	// private Action parserBaseAction;
	// private Action parserBaseSylvieAction;
//	private Action parserConservation;
	private Action creerFichierCotation;
	private IWorkbenchAction saveAction;

	private Action recupererPrescriptionAction;

	private Action recupererPrescriptionPDFAction;
	private Action creerFeuilleTravailAction;
	private Action listeADNAction;
	private Action rechercherFeuilleTravailAction;
//	private Action modifieBaseAction;
//	private Action correctionChampPrelAction;
	private Action cotationNonPasseeAction;
	private Action importDonneesFeuillePuceAction;

	// private Action changerUtilisateurAction;

	public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
		super(configurer);
	}

	@Override
	protected void fillCoolBar(ICoolBarManager coolBar) {
		IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
		coolBar.add(new ToolBarContributionItem(toolbar, "main"));

		toolbar.add(rechercherDossierPopupAction);
		if (DroitServiceImpl.getInstance().peutCreerByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "personne")) {
			toolbar.add(creerDossierAction);
		}

		if (DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement")) {
			toolbar.add(saveAction);

		}
		toolbar.add(listeTravailAction);

		if (DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "admin")) {
			// toolbar.add(modifieBaseAction);
			// toolbar.add(parserFichierAction);
			// toolbar.add(parserBaseAction);
			// toolbar.add(parserBaseSylvieAction);
		//	toolbar.add(parserConservation);
			toolbar.add(new Separator());
			toolbar.add(creerFichierCotation);
			toolbar.add(droitsUtilisateurAction);

//			toolbar.add(correctionChampPrelAction);
			toolbar.add(cotationNonPasseeAction);
		}
		// toolbar.add(creerPrelevementAction);
		// toolbar.add(creerAnalyseAction);

		if (DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "puce")) {

			// à faire que si utilisateur Puce :
			toolbar.add(new Separator());
			toolbar.add(recupererPrescriptionAction);
			toolbar.add(creerFeuilleTravailAction);
			toolbar.add(rechercherFeuilleTravailAction);
			toolbar.add(importDonneesFeuillePuceAction);
			toolbar.add(rechercherRegionPopupAction);
			toolbar.add(listeADNAction);
			toolbar.add(reunionPuceAction);

		}

		if (ApplicationContexte.getInstance().getUtilisateur().getNom().equals("Grespan")) {
			toolbar.add(new Separator());
			toolbar.add(creerFichierCotation);
		}

		// toolbar.add(new Separator());
		// toolbar.add(changerUtilisateurAction);
	}

	@Override
	protected void fillMenuBar(IMenuManager menuBar) {
		MenuManager fileMenu = new MenuManager("&Dossier", IWorkbenchActionConstants.M_FILE);
		MenuManager puceMenu = new MenuManager("&Puce");
		MenuManager helpMenu = new MenuManager("&Aide", IWorkbenchActionConstants.M_HELP);

		menuBar.add(fileMenu);

		// Dossier
		fileMenu.add(newWindowAction);
		fileMenu.add(new Separator());
		fileMenu.add(creerDossierAction);
		fileMenu.add(rechercherDossierPopupAction);
		fileMenu.add(listeTravailAction);
		fileMenu.add(saveAction);
		// fileMenu.add(creerPrelevementAction);
		// fileMenu.add(creerAnalyseAction);
		fileMenu.add(new Separator());
		fileMenu.add(exitAction);
		// fileMenu.add(changerUtilisateurAction);

		if (DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "puce")) {

			// à faire si utlisateur puce
			// Puces
			menuBar.add(puceMenu);
			puceMenu.add(recupererPrescriptionAction);
			puceMenu.add(recupererPrescriptionPDFAction);
			puceMenu.add(creerFeuilleTravailAction);
			puceMenu.add(rechercherFeuilleTravailAction);
			puceMenu.add(importDonneesFeuillePuceAction);
			puceMenu.add(rechercherRegionPopupAction);
			puceMenu.add(listeADNAction);
			puceMenu.add(reunionPuceAction);
		}

		// Add a group marker indicating where action set menus will appear.
		menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
		menuBar.add(helpMenu);
		// Help
		helpMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
		helpMenu.add(new Separator());
		helpMenu.add(aboutAction);
	}

	@Override
	protected void makeActions(final IWorkbenchWindow window) {
		// Creates the actions and registers them.
		// Registering is needed to ensure that key bindings work.
		// The corresponding commands keybindings are defined in the plugin.xml
		// file.
		// Registering also provides automatic disposal of the actions when
		// the window is closed.

		exitAction = ActionFactory.QUIT.create(window);
		register(exitAction);

		aboutAction = ActionFactory.ABOUT.create(window);
		register(aboutAction);

		newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
		register(newWindowAction);

		saveAction = ActionFactory.SAVE.create(window);
		register(saveAction);

		ouvrirDossierAction = new OuvrirDossierAction(window, "Ouvrir le dossier", DossierEditor.ID);
		register(ouvrirDossierAction);

		creerDossierAction = new CreerDossierAction(window, "Nouveau dossier", DossierEditor.ID);
		register(creerDossierAction);

		if (DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "admin")) {

			// parserFichierAction = new
			// ParserFichierAction("Parser les fichiers");
			// register(parserFichierAction);
			//
			// parserBaseAction = new ParserBaseAction("Parser la  base");
			// register(parserBaseAction);
			//
			// modifieBaseAction = new ModifieBaseAction("Modifie SQL");
			// register(modifieBaseAction);
			//
			// parserBaseSylvieAction = new
			// ParserBaseSylvieAction("Parser base sylvie");
			// register(parserBaseSylvieAction);
			//
//			parserConservation = new ParserConservationAction("Parser Conservation");
//			register(parserConservation);

//			correctionChampPrelAction = new CorrectionChampPrelAction("Correction des champs de prélèvement");
//			register(correctionChampPrelAction);
			
			cotationNonPasseeAction = new CotationNonPasseeAction("Cotation non passées dans pastel");
			register(cotationNonPasseeAction);

			creerFichierCotation = new CreerFicherCotationAction("Créer les fichiers de cotation");
			register(creerFichierCotation);

			droitsUtilisateurAction = new ChangeDroitsUtilisateurAction("Modifier les droits des utilisateurs");
			register(creerFichierCotation);
			
	

		}
		listeTravailAction = new ListeTravailAction("Liste de travail à faire", window);
		register(listeTravailAction);

		// creerPrelevementAction = new CreerPrelevementAction(window,
		// "Nouveau prélèvement", DossierEditor.ID);
		// register(creerPrelevementAction);
		//
		// creerAnalyseAction = new CreerAnalyseAction(window,
		// "Nouvelle analyse", DossierEditor.ID);
		// register(creerPrelevementAction);

		rechercherDossierPopupAction = new RechercheDossierPopupAction("Rechercher un dossier", window);
		register(rechercherDossierPopupAction);

		if (DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "puce")) {
			recupererPrescriptionAction = new RecupererPrescriptionAction("Recupérer les prescriptions");
			register(recupererPrescriptionAction);

			recupererPrescriptionPDFAction = new RecupererPrescriptionPDFAction("Recupérer les prescriptions PDF");
			register(recupererPrescriptionPDFAction);

			creerFeuilleTravailAction = new CreerFeuilleTravailAction("Créer une feuille de travail", window);
			register(creerFeuilleTravailAction);

			rechercherFeuilleTravailAction = new RechercherFeuilleTravailAction("Rechercher une feuille de travail", window);
			register(rechercherFeuilleTravailAction);
			
			importDonneesFeuillePuceAction = new ImportDonneesFeuillePuceAction("Importer les données de la feuille de travail", window);
			register(importDonneesFeuillePuceAction);

			rechercherRegionPopupAction = new RechercheRegionPopupAction("Rechercher une région dans le graphe des puces", window);
			register(rechercherRegionPopupAction);

			listeADNAction = new ListeADNAction("Liste d'ADN", window);
			register(listeADNAction);
			
			reunionPuceAction = new ReunionPuceAction("Dossier à passer en réunion puce", window);
			register(reunionPuceAction);

		}

		if (ApplicationContexte.getInstance().getUtilisateur().getNom().equals("Grespan")) {
			creerFichierCotation = new CreerFicherCotationAction("Creer les fichiers de cotation");
			register(creerFichierCotation);

		}
		// changerUtilisateurAction = new
		// ChangerUtilisateurAction("Changer d'utilisateur", window);
		// register(changerUtilisateurAction);
	}
}
